<?php
include 'AdminController.php';
class Admin_UserController extends Admin_AdminController
{
    public function init(){
    	//レイアウトを設定する
        $layoutPath = APPLICATION_PATH . '/templates/admin/admin';
        $option = array('layout' => 'index', 'layoutPath' => $layoutPath);
        Zend_Layout::startMvc($option);
        
        //アクティブメニューを設定
        $this->view->active_menu = "users";
    }
	
    /**
     * ユーザを一覧したり、検索したりするためのアクション
     */
	public function indexAction ()
    {
    	//必要なクラスを読み込む
    	Zend_Loader::loadClass("UserModel");
    	Zend_Loader::loadClass("TableModel");
    	Zend_Loader::loadClass("LogModel");
    	Zend_Loader::loadClass("SelectListModel");
    	
    	$request = $this->getRequest();
    	$view = $this->view;
    	
    	//TODO パラメーターを取得
    	$search_type = $request->getParam('search_type');
    	$search_key = $request->getParam('search_key');
    	$status = $request->getParam("status", 0);
    	$page = $request->getParam('page', 1);
    	
    	//TODO データベースからデータを読み出す
    	$model = new UserModel();
    	$data = $model->getListUser($search_type, $search_key, $page, 10, $status);
    	$data_count = $model->getListUserCount($search_type, $search_key, $status);
    	
    	//TODO データを一覧に表現するためにテーブルモデルを作成
    	$table_model = new TableModel();
    	$table_model->setTable_title("ユーザ");
    	
    	//TODO テーブルのヘッダーを設定
    	$table_model->addHeader('username', 'ユーザ名', true);
    	$table_model->addHeader('type', 'ユーザタイプ', false);
    	$table_model->addHeader('name', '氏名', true);
    	$table_model->addHeader('email', 'メールアドレス', false);
    	$table_model->addHeader('phone', '電話番号', false);
    	$table_model->addHeader('status', '状態', false);

    	//TODO テーブルのデータを設定
    	$table_model->setTable_data($data);
    	$table_model->setData_count($data_count);
    	$table_model->setPage($page);
    	$table_model->setLine_per_page(10);
    	
    	//TODO テーブルのリンクを設定
    	$table_model->setSearch_link("/admin/user");
    	$table_model->setAdd_link("/admin/user/add");
    	$table_model->setEdit_link("/admin/user/edit");
    	$table_model->setDelete_link("/admin/user/delete");
    	
    	//TODO　ビューに送る
    	$view->table = $table_model;
    	
    	//TODO　AJAX検索の場合
    	if($request->getParam('search')){
    		//disable layout
    		$layout = $this->_helper->layout();
		    $layout->disableLayout();
		    
		    $view->search_mode = 1;
    	}
    	
    	//TODO 通知表示
    	$view->msg = $request->getParam('msg');
    	
    	//TODO Navigator を設定
    	$nav['ホーム'] = "/admin";
    	$nav['ユーザの一覧'] = "/admin/user";
    	$view->nav = $nav;
    	
    	$type_translate = array(
    	    ADMIN_USER => '管理者',
    		NORMAL_USER => 'テナント',
    	);
    	
    	$status_translate = array(
    		STATUS_NORMAL => 'アクティブ',
			STATUS_WAITING => '承認待ち'
    	);
    	
    	$table_translate['type'] = $type_translate;
    	$table_translate['status'] = $status_translate;
    	$view->table_translate = $table_translate;
    	$view->status_list = SelectListModel::getListUserStatus(true);
    }
    
    /**
     * ユーザ追加のアクション
     */
    public function addAction(){
    	//TODO 必要なクラスを読み込む
    	Zend_Loader::loadClass("UserModel");
    	Zend_Loader::loadClass("MailModel");
    	Zend_Loader::loadClass("NewUserMailTemplate");
    	Zend_Loader::loadClass("LogModel");
    	
    	$logModel = new LogModel();
    	$log_line = $logModel->getLogLine();
    	
    	$request = $this->getRequest();
    	$view = $this->view;
    	
    	//TODO パラメターを習得
    	$username = $request->getParam("username");
    	$name = $request->getParam("name");
    	$email = $request->getParam("email");
    	$phone = $request->getParam("phone");
    	$address = $request->getParam("address");
    	$type = $request->getParam("type") ? "2" : "1";
    	
    	if($request->isPost()){
    		//TODO ユーザを追加
    		$model = new UserModel();
    		
    		$password = hash("SHA1", DEFAULT_PASSWORD);
    		
    		$check = $model->addUser($username, $password, $type, $name, $email, $phone, $address);
    		Zend_Debug::dump("log", "log", "log");
    		if($check){
    			//TODO ログ
       			$log_line->setType(LogLine::TYPE_OPERATION);
    			$log_line->addParts('('.$username);
    			$log_line->addParts($name);
    			$log_line->addParts($email);
    			$log_line->addParts($phone);
    			$log_line->addParts($type.')');
    			$log_line->addParts('のユーザを追加した');
    			$log_line->setTime();
    			$logModel->addLogLine($log_line);
    			$logModel->flush();
    			
    			
    			//TODO ユーザに新しいアカウント情報を送る
    			$mail_model = new MailModel();
    			$mail_model->setReceive_mail($email);
	    		$mail_model->setReceive_name($name);
				$template = new NewUserMailTemplate($username, DEFAULT_PASSWORD, $name, $email, $phone);
	    		
				$mail_model->setSubject($template->getSubject());
	    		$mail_model->setContent($template->getHtmlContent());
	    		$result = $mail_model->send();
	    		if(!$result)
					$this->_redirect('/admin/user?msg=' . $username .'が追加されました。メールを送信できない。');
				else
    				$this->_redirect('/admin/user?msg=' . $username .'が追加されました。メールを送信した。');
    			
    		}else{
    			//TODO ログ
       			$log_line->setType(LogLine::TYPE_OPERATION);
    			$log_line->addParts('('.$username);
    			$log_line->addParts($name);
    			$log_line->addParts($email);
    			$log_line->addParts($phone);
    			$log_line->addParts($type.')');
    			$log_line->addParts("のユーザを追加できません");
    			$log_line->setTime();
    			$logModel->addLogLine($log_line);
    			$logModel->flush();
    			$this->_redirect('/admin/user?msg=' . $username .'が追加できません。');
    		} 
    	}
    	
    	//TODO　データをビューに送る
    	$view->username = $username;
    	$view->name = $name;
    	$view->email = $email;
    	$view->phone = $phone;
    	$view->type = $type;
    	
    	//TODO Navigator を設定
    	$nav['ホーム'] = "/admin";
    	$nav['ユーザの一覧'] = "/admin/user";
    	$nav['ユーザ追加'] = "/admin/user/add";
    	$view->nav = $nav;
    }
    
    /**
     * ユーザ情報変更ためのアクション
     */
    public function editAction(){
    	//TODO 必要なクラスを読み込む
    	Zend_Loader::loadClass("UserModel");
    	Zend_Loader::loadClass("LogModel");
    	
    	$logModel = new LogModel();
    	$log_line = $logModel->getLogLine();
    	
    	$request = $this->getRequest();
    	$view = $this->view;
    	
    	//TODO　パラメターを習得
    	$edit_id = $request->getParam("edit_id");
    	
    	//TODO　ユーザモデルのインスタンスを作成
    	$model = new UserModel();
    	
    	if(!$request->isPost()){
    		//TODO　更新したいユーザ情報をビューに送る
    		$editObject = $model->fetchUser($edit_id);
    		if(!$editObject)
    			$this->_redirect('/admin/user?msg=' . 'まずテナントさんを承認してください。');
    		
    		$view->username = $editObject->username;
    		$view->name = $editObject->name;
    		$type = $editObject->type;
    		$view->email = $editObject->email;
    		$view->phone = $editObject->phone;
    		$view->address = $editObject->address;

    	}else{
    		//TODO　ユーザ情報を更新する
			$data = array(
				'username' => $request->getParam("username"),
				'name' => $request->getParam("name"),
				'email' => $request->getParam("email"),
				'phone' => $request->getParam("phone"),
				'type' => $request->getParam("type") ? "2" : "1",
				'address' => $request->getParam('address')
			);    		
    		
			$check = $model->updateUserData($edit_id, $data);
			
			if($check){
				//TODO ログ
       			$log_line->setType(LogLine::TYPE_OPERATION);
    			$log_line->addParts('('.$edit_id);
    			$log_line->addParts($data['username']);
    			$log_line->addParts($data['name']);
    			$log_line->addParts($data['email']);
    			$log_line->addParts($data['phone']);
    			$log_line->addParts($data['type'].')');
    			$log_line->addParts('の情報が更新されました。');
    			$log_line->setTime();
    			$logModel->addLogLine($log_line);
    			$logModel->flush();
    			$this->_redirect('/admin/user?msg=' . $request->getParam("username") .'の情報が更新されました。');
    		}else{
    			//TODO ログ
       			$log_line->setType(LogLine::TYPE_ERROR);
    			$log_line->addParts('('.$edit_id);
    			$log_line->addParts($data['username']);
    			$log_line->addParts($data['name']);
    			$log_line->addParts($data['email']);
    			$log_line->addParts($data['phone']);
    			$log_line->addParts($data['type'].')');
    			$log_line->addParts('の情報が更新できません。');
    			$log_line->setTime();
    			$logModel->addLogLine($log_line);
    			$logModel->flush();
    			$this->_redirect('/admin/user?msg=' . $request->getParam("username") .'の情報が更新できません。');
    		} 
    	}
    	
    	//TODO Navigator を設定
    	$nav['ホーム'] = "/admin";
    	$nav['ユーザの一覧'] = "/admin/user";
    	$nav['ユーザ情報変更'] = "#";
    	$view->nav = $nav;
    }
    
	/**
	 * ユーザを削除するためのアクション
	 */
    public function deleteAction ()
    {
        Zend_Loader::loadClass("UserModel");

        $request = $this->getRequest();
        
        $model = new UserModel();
        $del_ids = $request->getParam("del_ids");
        if ($del_ids) {
            if ($model->deleteUser($del_ids))
                echo "success";
            else
                echo "error";
        } else {
            echo "not_found_id";
        }
        exit();
    }
    
    /**
     * メールがありましたか
     */
    
    public function isEmailExistAction ()
    {
    	Zend_Loader::loadClass("UserModel");
    	$request = $this->getRequest();
    	$model = new UserModel();
    	
    	if ($model->isEmailExist($request->getParam("email"))) {
    		echo "false";
    		exit;
    	}
    	
    	echo "true";
    	exit();
    }
    
    /**
     * ユーザがありましたか
     */
    public function isUsernameExistAction()
    {
    	Zend_Loader::loadClass("UserModel");
    	$request = $this->getRequest();
    	$model = new UserModel();
    	
    	if ($model->isUsernameExist($request->getParam("username"))){
    		echo "false";
    		exit();
    	}
    	echo "true";
    	exit();
    }
    
    public function confirmAction(){
    	Zend_Loader::loadClass("UserModel");
    	$request = $this->getRequest();
    	$model = new UserModel();
    	
    	$user_id = $request->getParam("user_id");
    	if(!$user_id)
    		exit();
    	else{
    		$data = array(
    			'status' => STATUS_NORMAL
    		);	
    		$model->updateUserData($user_id, $data);
    		exit();
    	}    	
    }
}